#ifndef CONTROLADOR_H_
#define CONTROLADOR_H_
#include <string>
#include <vector>

#include "../estruturas/ArvoreB.h"
#include "../estruturas/ArvoreC.h"
#include "Logrador.h"
#include "Usuario.h"
#include "Interesse.h"
#include "Livro.h"
#include "CarrinhoCompra.h"

using namespace std;
/*!
 * \brief Controlador Principal do sistema
 *
 * Documentar!
 *
 *
 *
 */
class Controlador
{

private:
	string DirDados;		   //!< Diretorio que contem os dados
	Usuario UsuarioCorrente;   //!< Usuario cliente/funcionario ativo no sistema
	Interesse interesse;
	ArvoreB<string, Usuario> Usuarios;
	ArvoreB<string, Logrador> Logradores;
	ArvoreC<string, Livro> ArvoreInteresse;

public:
	Controlador();
	virtual ~Controlador();
	void init();

	// Caso de Uso 1
	void CarregaLogins();
	Usuario CheckLogin(string login, string senha);

	// Caso de Uso 2
	long GetProximoLivroID();
	void AdicionaLivro(Livro novo_livro);

	// Caso de Uso 3
	Livro SelecionaLivro(long id);
	void AtualizaLivrosVendidos(CarrinhoCompra cc);
	void RegistraVenda(CarrinhoCompra cc);

	// Caso de Uso 4
	Logrador PesquisaCEP(string cep);
	void AtualizaCliente(Usuario cliente);
	void RegistraUsuario(Usuario usuario);
	void CarregaLogradores();

	// Caso de Uso 5, 6 e 7
	Usuario GetUsuario();
	Interesse GetInteresse();
	void SetInteresse(Interesse _iteresse);
	void MontaPesquista(Interesse::ENUM_INTERESSE _tipoInteresse);
	vector<Livro> PesquisaInteresses(string valor);

};

#endif /*CONTROLADOR_H_*/
